package com.example.demo.controller;

import com.example.demo.entity.DemoEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;
import java.util.Locale;

/**
 * @author ml
 * @create 2017-07-10--14:11
 */
@RestController
public class IndexController {
    /*
    * 注入了一个MessageSource的接口对象，
    * 这个对象是用于格式化错误消息的。根据传入的错误字段对象（FieldError）结合hibernate-validator验证的内置错误消息文件进行输出错误消息，hibernate-validator的错误消息支持国际化，
    * 所以我们获取错误消息的时候需要传入Locale对象获取本地的国际化类型。
    *
    * */
    @Autowired
    private MessageSource messageSource;

    @RequestMapping(value = "/validator")
    public String validator(
            @Valid DemoEntity demoEntity,BindingResult result
            ){
        if(result.hasErrors()){
            StringBuilder msg=new StringBuilder();
            //获取错误字段集合
            List<FieldError> fieldErrors=result.getFieldErrors();
            //获取本地locale.zh_CN
            Locale currentLocal= LocaleContextHolder.getLocale();
            //遍历错误字段获取错误信息
            for(FieldError fieldError:fieldErrors){

                //获取错误信息
                String errorMessage=messageSource.getMessage(fieldError,currentLocal);
                //添加错误信息
                msg.append(fieldError.getField()+":"+errorMessage);
            }
            return msg.toString();
        }

        return "验证通过,"+"名称："+demoEntity.getName()+" 年龄："+demoEntity.getAge()+"邮箱地址："+demoEntity.getMail();
    }
}
